<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 引用值
        // array object function date RegExp
        // array
        var arr = [1, 2, 3, 4, 5, 6, 7];
        
        // object
        var person = {
            name: '小曼',
            age: 18
        }
        console.log(person);
        // typeof
        // number string boolean undefind function object...
        
        // Object => 引用类型 object/array
        // null => object null是一个bug，之前一直做引用类型
        console.log(typeof(person))
        console.log(typeof(undefined))

        console.log(typeof a); //undefind: a未定义，会报错，typeof a 就是undefind;
        console.log(typeof(typeof(a))) // string: 里面的typeof(a)是undefind，undefined是string类型，typeof(undefind) => string

        /** 显示类型转换/隐式类型转换 **/
        /** 显式类型转换 **/
        // Number
        // null, 数字, true, false => number
        // 除以上的为 NaN
        console.log(Number(true));

        // parseInt 取整 parseFloat 取浮点 （parseInt和parseFloat特性一致）
        // 只认数字，有数字则返回number，否则NaN
        // parseInt(value, '基数') 按进制换算
        console.log(parseInt('1abc2'));
        console.log(parseFloat('3.1415926aaa').toFixed(2))

        // String & toString
        // 转化为字符串
        // toString 不能转化undefind&null, 有radix参数
        // var num = 11;
        // String(num);
        // num.toString();

        // Boolean
        // undefind null NaN '' 0 false  => false
        // 其他的都是true

        /** 隐式类型转换 **/
        // var a = '123';
        // a++;
        // console.log(a); // 124

        // var a = 'a' + 1; // a1

        // * / - % str -> 隐式转换Number()
        // var a = '3' * 2; // 6

        // var a = '1' > 2; // false

        // var a = 1 > '2'; // false

        // > < >= <= 转换ascii
        // var a = 'a' < 'b'; // ascii

        // var a = 1 == '1' // true
        // var a = 1 != '2' // true
        
        // var a = 1 === '1'; // false
        // var a = NaN == NaN; // NaN不等于任何东西

        // var a1 = 2 > 1 > 3 // false
        // var a2 = 2 > 1 == 1; // true
        // console.log(a1, a2);

        //undefind null 与其他任何元素没有任何关系
        // var a = undefined > 0 // false
        // var a = null > 0 // false

        // undefind只与null有关
        // var a = undefined == null; // true
        // var a = undefined === null; // false //数据类型不一样

        // var a = '+123'; // number 123
        // var a = '-123'; // number -123
        // var a = '-abc'; // number NaN

        // var a = isNaN(NaN); // true
        // var a = isNaN(123); // false
        // var a = isNaN('123'); // false
        // var a = isNaN('a'); // true
        // var a = isNaN(null); // false
        // var a = isNaN(undefined); // true

        // console.log(a);

        // 斐波那契数列    黄金分割数列    兔子数列
        // 1 1 2 3 5 8 13

        console.log('==================');
        //作业
        function fibonacci(n) {
            var n1 = 1, // 前
                n2 = 1, // 后
                sum = 0; // 总和
            if (n == 1 || n == 2) {
                return sum = 1;
            } else {
                
                for(var i = 2; i < n; i++){
                    sum = n1 + n2;
                    n1 = n2;
                    n2 = sum;
                }
                return sum;
            }
        }
        var f = fibonacci(10);
        console.log(f);

        console.log('==================');
        // 求100以内的所有质数
        function zhiShu(n) {
            var num = 0,
                count = 0;
            for(var i = 1; i < n; i++) {
                for(var j = 1; j <= i; j++) {
                    if(i % j === 0) {
                        count++;
                    }
                }
                if(count === 2) {
                    console.log(i)
                }
                count = 0;
            }
        }

        zhiShu(100);
    </script>
</body>
</html>